/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Com.TransaksiParkirdanLaporan.Com.Transaksi;

import Login.Koneksi;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Tea-Nose
 */
public class DataRekap {

    private String kodeRekap;
    private String idKaryawan;
    private String tanggalRekap;
    private double jumlahPendapatanPerShift;
    private int jumlahKendaraanPerShift;
    private Connection conn;
    private static DataRekap koneksi;

    public DataRekap() {
    }

    public DataRekap(Connection conn) {
        this.conn = conn;
    }

    public static DataRekap getConnection() throws SQLException, IOException {
        if (koneksi == null) {
            koneksi = new DataRekap(Koneksi.getDBConnection());

        }
        return koneksi;
    }

    /**
     * @return the jumlahPendapatanPerShift
     */
    public double getJumlahPendapatanPerShift() {
        return jumlahPendapatanPerShift;
    }

    /**
     * @param jumlahPendapatanPerShift the jumlahPendapatanPerShift to set
     */
    public void setJumlahPendapatanPerShift(double jumlahPendapatanPerShift) throws Exception {
        if (jumlahPendapatanPerShift < 0) {
            throw new Exception("jumlah pendapatan tidak mungkin minus");
        } else {
            this.jumlahPendapatanPerShift = jumlahPendapatanPerShift;
        }
    }

    /**
     * @return the jumlahKendaraanPerShift
     */
    public int getJumlahKendaraanPerShift() {
        return jumlahKendaraanPerShift;
    }

    /**
     * @param jumlahKendaraanPerShift the jumlahKendaraanPerShift to set
     */
    public void setJumlahKendaraanPerShift(int jumlahKendaraanPerShift) throws Exception {
        if (jumlahKendaraanPerShift < 0) {
            throw new Exception("Jumlah kendaraan tidak mungkin minus");
        } else {
            this.jumlahKendaraanPerShift = jumlahKendaraanPerShift;
        }
    }

    /**
     * @return the kodeRekap
     */
    public String getKodeRekap() {
        return kodeRekap;
    }

    /**
     * @param kodeRekap the kodeRekap to set
     */
    public void setKodeRekap(String kodeRekap) throws Exception {
        if (kodeRekap == null || kodeRekap.matches("")) {
            throw new Exception("Kode rekap belum diisi atau masih kosong");
        } else if (kodeRekap.length() > 7) {
            throw new Exception("Kode rekap lebih dari 7 karakter");
        } else if (kodeRekap.matches("[R][K][P][0-9][0-9][0-9][0-9]")) {
            this.kodeRekap = kodeRekap;
        } else {
            throw new Exception("Format kode Rekap salah, format kode rekap RKP diikuti 4 digit angka");
        }
    }

    /**
     * @return the idKaryawan
     */
    public String getIdKaryawan() {
        return idKaryawan;
    }

    /**
     * @param idKaryawan the idKaryawan to set
     */
    public void setIdKaryawan(String idKaryawan) throws Exception {
        if (idKaryawan == null || idKaryawan.matches("")) {
            throw new Exception("Id Karyawan belum diisi");
        } else if (idKaryawan.toCharArray().length > 10) {
            throw new Exception("Id Karyawan salah, masukan lebih dari 10");
        } else if (!idKaryawan.matches("[a-zA-Z0-9]*")) {
            throw new Exception("Id Karyawan salah, terdapat karakter atau spasi");
        } else {
            this.idKaryawan = idKaryawan;
        }
    }

    /**
     * @return the tanggalRekap
     */
    public String getTanggalRekap() {
        return tanggalRekap;
    }

    /**
     * @param tanggalRekap the tanggalRekap to set
     */
    public void setTanggalRekap(String tanggalRekap) throws Exception {

        if (tanggalRekap == null || tanggalRekap.matches("")) {
            throw new Exception("Tanggal rekap belum diisi");
        } else if (tanggalRekap.length() > 10) {
            throw new Exception("Tanggal rekap terlalu panjang");
        } else if (!tanggalRekap.matches("[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]")) {
            throw new Exception("Format tanggal salah, format tanggal = dd-MM-yyyy");
        } else if (tanggalRekap.substring(0, 2).matches("[0][0]")) {
            throw new Exception("Hari tidak mungkin 00");
        } else if (tanggalRekap.substring(3, 5).matches("[0][0]")) {
            throw new Exception("Bulan tidak mungkin 00");
        } else {
            this.tanggalRekap = tanggalRekap;
        }
    }

    public void simpanDataRekap(DataRekap dataRekap) throws SQLException {
        String sisip = "update datarekap set idkaryawan=(?), tanggalrekap=(?), jumlahkendaraanpershift=(?), jumlahpendapatanpershift=(?) where koderekap=(?)";
        PreparedStatement pstmt = conn.prepareStatement(sisip);
        pstmt.setObject(5, dataRekap.getKodeRekap());
        pstmt.setObject(1, dataRekap.getIdKaryawan());
        pstmt.setObject(2, dataRekap.getTanggalRekap());
        pstmt.setObject(3, dataRekap.getJumlahKendaraanPerShift());
        pstmt.setObject(4, dataRekap.getJumlahPendapatanPerShift());
        pstmt.executeUpdate();
    }

    public String idRekap() throws SQLException, FileNotFoundException, IOException {
        String sql = "call norekap(?)";
        CallableStatement callst = conn.prepareCall(sql);
        callst.registerOutParameter(1, java.sql.Types.VARCHAR);
        callst.execute();
        String noRekap = callst.getString(1);
        return noRekap;
    }

    public void deleteDataRekap(String noRekap) {
        try {
            String query = "delete from datarekap where koderekap='" + noRekap + "'";
            PreparedStatement pstmt = conn.prepareStatement(query);
            pstmt.executeUpdate();
        } catch (SQLException ex) {
            Logger.getLogger(DataParkir.class.getName()).log(Level.SEVERE, null, ex);
        }

    }
}
